package com.zhuang.reflection;

import java.lang.reflect.Field;

public class ReflecAccessProperty {
	public static void main(String[] args)
			throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {

		// 1. 得到Student类对应的 Class对象
		Class<?> stuClass = Class.forName("com.zhuang.reflection.Student");
		// 2. 创建对象
		@SuppressWarnings("deprecation")
		// o 的运行类型就是Student
		Object o = stuClass.newInstance();
		System.out.println(o.getClass());
		// 3. 使用反射得到age 属性对象
		Field age = stuClass.getField("age");
		age.set(o, 88);// 通过反射来操作属性
		System.out.println(o);
		// 返回age属性的值
		System.out.println(age.get(o));

		// 4. 使用反射操作name 属性
		Field name = stuClass.getDeclaredField("name");
		// 对name 进行暴破, 可以操作private 属性
		name.setAccessible(true);
		// name.set(o, "康小庄");
		// 因为name是static属性，因此o也可以写出null
		name.set(null, "康小庄~");
		System.out.println(o);
		// 获取属性值
		System.out.println(name.get(o));
		// 获取属性值, 要求name是static
		System.out.println(name.get(null));

	}
}

class Student {
	public int age;
	private static String name;

	public Student() {
	}

	public String toString() {
		return "Student [age=" + age + ", name=" + name + "]";
	}
}
